home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 1996 April
/
CHIP 1996 aprilis (CD06).zip
/
CHIP_CD06.ISO
/
hypertxt.arj
/
92
/
SZIMU1.CD
< prev
next >
Wrap
Text File
|
1995-09-17
|
16KB
|
454 lines
@VSzimuláció számítógéppel@N
ùjabb sorozatot indítunk, melynek témája a számítógépes
szimuláció ""SK", azaz csináld magad módon. A gépek
teljesítôképességének rohamos növekedtével egyre többek
számára elérhetô ez az izgalmas és szórakoztató, játéknak
tûnô komoly szakterület. E számunkban meg kívánjuk gyôzni az
Olvasót a téma fontosságáról, és mellesleg
megvalósíthatóságáról, elérhetôségérôl. A késôbbiek során
alapvetô módszerekkel, ötletekkel szeretnénk foglalkozni,
úgy, hogy haszonnal olvashassa a cikkeket kezdô és haladó
egyaránt.
@K""Akár egy halom hasított fa,
@Khever egymáson a világ,
@Kszorítja, nyomja, összefogja
@Kegyik dolog a másikát
@Ks így mindenik determinált."
@KJózsef Attila: Eszmélet@N
Az ember kíváncsi, meg kívánja ismerni a körülötte lévô
világot. A világ azonban ellenáll ennek, mert bonyolult. A
jelenségek végtelen gazdagsága áll szemben az ember
korlátozott képességeivel. De az ember sem adja fel: a
tudomány évezredek alatt kialakította a maga igen hatékony
megismerési módszerét:
1. Figyeld meg alaposan a valóságot! (Pontosabban azt a
jelenségkört, mely valamiért érdekel.)
2. Emeld ki a lényeges vonásokat! (Ez talán a
legnehezebb lépés.)
3. Készíts minél egyszerûbb modellt, amely értelmezi a
lényeges adatok változásait!
4. Ellenôrizd a modellt kísérletekkel!
5. Mûködtesd a modellt, vonj le újabb következtetéseket!
6. Ållapítsd meg a modell korlátait, érvényességi körét!
7. Lehet elölrôl kezdeni...
Ez a módszer -- tudnillik modellek alkotása és
alkalmazása -- vezette el az emberiséget a kôbaltától a
Newton-törvényeken és a gôzgépen át a relativitáselméletig,
a maghasadásig, az ûrhajózásig és a számítógépekig. És
pontosan a számítógépek tesznek lehetôvé e jól bevált
folyamatban új megközelítést, új módszereket.
@VA matematikai háttér@N
A természeti jelenségek eddigi modelljeinek matematikai
alapja a differenciálegyenlet. Ez egy olyan egyenlettípus,
mely egy (vagy több) mennyiség és annak változási sebessége
között ír le kapcsolato(ka)t. Itt -- némileg leegyszerûsítve
a kérdést -- három eset fordul(hat) elô.
@V1.@N Bizonyos egyszerû esetekben a differenciálegyenletnek
található elemi matematikai függvényekkel leírható teljes
megoldása. Például a rugóra függesztett test mozgását a
következô egyenlet írja le:
2 2
d y/dt = -k * y
ami annyit tesz, hogy a test pillanatnyi kitérésével
arányos mértékben, de azzal ellentétes irányban gyorsul.
Ennek az úgynevezett másodrendû differenciálegyenletnek a
megoldása:
y = A*sin(2*π*f*t)
Ez a középiskolai tanulmányokból ismert úgynevezett
harmonikus rezgômozgás egyenlete. Ezt tudván, a test
mozgásának bármely állapota ismertnek tekinthetô,
számítógépre elsô közelítésben nincs szükségünk.
@V2.@N Az esetek egy másik -- számszerûleg sokkal nagyobb --
részében ilyen megoldás nincs (nem ismert), a felállított
differenciálegyenleteket közelítô módszerekkel kell
megoldani. Ilyen problémákkal találkozhatunk például a
biológiai rendszerek vizsgálatánál. Egy egyszerû példa az
ismert ""nyúl--róka" probléma, melynek leírását az alábbi
egyenletrendszer szolgáltatja:
d N/ d t = a*N - k*N*R
d R/ d t = -b*R + l*N*R,
ahol N, R a nyulak, illetve rókák aktuális (idôtôl
függô) száma; a, b, k, l az együttélésüket jellemzô
együtthatók. Az egyenletek jelentése: a nyulak a rókák
nélkül korlátlanul szaporodnának, a rókák pedig nyulak
(táplálék) nélkül kihalnának. Ez az egyenletrendszer
numerikusan megoldható például az Euler módszerrel, mely egy
rekurzív formulát szolgáltat N és R értékére. Magától
érthetôdô módon, itt a számítógépek nagyon jelentôs
szerephez jutnak (már nemcsak a szemléletes
megjelenítésben), hiszen adott esetben nagytömegû számítást
(esetleg egyenletek százainak egyidejû megoldását) kell
elvégeznünk.
@V3.@N A jelenségek legnagyobb osztályát azok a folyamatok
alkotják, melyekre nem létezik differenciálegyenlet.
Gondoljunk csak olyan ""egyszerû" jelenségekre, mint a
jégvirág növekedése az ablakon; a felfújódó léggömb
""belvilága"; a valóságos biológiai rendszerek; a társadalmi
változások; a globális problémák elemzése, elôrejelzése.
Ilyenkor számos különálló egyed mozgását, változását
kell nyomon követni, s a rendszer globális viselkedését az
összetevôk átlagos tulajdonságainak megkeresésével
állapítjuk meg. Az ilyen vizsgálat számítógéppel végezhetô
el. A jelenségeket közvetlen módon szimuláljuk, azaz az
egyedeket, a közöttük ható kapcsolatokat lépésrôl lépésre
egy számítógépes -- konstruktív -- kísérlet keretében
vizsgáljuk. Ez az a lehetôség, amely a tudományos megismerés
hagyományos folyamatában új elemként jelentkezik, hiszen a
jelenségek egy hatalmas köre válik ezáltal elemezhetôvé,
megismerhetôvé. Egyben ez az a terület, mely a számítógépes
szimulációnak az igazi terepe, ahol igazán érdemes a gépeket
használni.
Ne becsüljük le azonban az elsô két pontban említett
jelenségeknél sem a számítógépeket. Több okunk is lehet
erre. Az átlagos matematikai képzettségû ember számára a
három jelenségcsoport nem különül el, hiszen sem a
differenciálegyenletek, sem megoldásuk módja nem
középiskolai tananyag, így egy ""elemi" probléma is
megoldhatatlanná, elemezhetetlenné válik a közvetlen
szimuláció számítógépes megvalósítása nélkül.
Belátható idôn belül kevesen leszünk abban a helyzetben,
hogy Niel Amstrong módjára szökdécselve tanulmányozzuk a
ferde hajítás jelenségét a Holdon, hogy láncreakciót
elemezzünk otthon, hogy a Nap belsejében lejátszódó
folyamatokat az iskolai fizika órán láthassuk... Egyszóval
számítógéppel szimulálunk, mert a jelenség veszélyes, drága,
túl gyors, vagy éppenséggel lassú, túl kisméretû, vagy túl
nagyméretû.
A természeti törvények a valóságos kísérletben
áthághatatlanok, hibás feltételek katasztrófához
vezethetnek, de nem így a számítógép képernyôjén. Feltehetôk
és -- legalábbis részben -- megválaszolhatók a ""mi lenne,
ha ..." típusú kérdések, melyek már nem egyszer vitték elôre
nagy lépéssel a tudomány ügyét.
@VA szimuláció@N
Nézzük ezek után, hogyan is lehet egy szimulációs
programot felépíteni, megírni. Egy általános, keret jellegû
algoritmus a következô (erre, mint csontvázra tesszük majd
rá mindig a ""húst", azaz a konkrét probléma algoritmusát):
@KSzimuláció:
Kezdeti értékek, paraméterek megadása;
Kezdôkép;
Idô=0;
Ciklus amíg Szükséges
Szimulációs lépés;
Eredménymegjelenítés;
Idô=Idô+1;
Ciklus vége;
Összegzés;
Program vége.@N
A fentiek jobb megértése érdekében tekintsünk most két
egyszerû problémát, méghozzá egy 1. illetve egy 3. típusú
jelenséget vizsgálva.
@VRadioaktivitás@N
Az elsô jelenség legyen a radioaktív bomlás. Ennek
felírható a differenciálegyenlete:
dN/dt = -k*N,
ami mindössze annyit jelent, hogy valamely idô alatt
elbomló atommagok száma arányos a meglevô magok számával, s
függ az atom úgynevezett bomlási állandójától (@Kk@N). Ennek az
egyenletnek van zárt megoldása, de mi ennek ismerete nélkül,
közvetlen szimulációval kívánjuk leírni a jelenséget. Ehhez
válasszuk az alábbi egyszerû modellt:
A képernyôn az atomokat egy karakteres táblázatban
(@KT$(I,J)@N) fogjuk megjeleníteni, ahol @KB@N jelöli a bomló, @KK@N a
keletkezô atomokat. (A mintaprogramban ""*"-ot és ""."-ot
használunk). Kezdeti, bemenô adatként szükségünk lesz az
atomok kezdeti számára (@KN@N), valamint bomlási
valószínûségükre (@KP@N). Kimenô adatként szerepel a
keletkezett, illetve a megmaradt atomok száma (@KU@N és @KN@N).
Megjeleníthetjük (a táblázat mellett) @KU@N és @KN@N numerikus
értékét, esetleg grafikonon nyomon követhetjük változásukat.
(Az egyszerûség kedvéért a @KK@N típusú atomok nem bomlanak
tovább.) Lássuk a korábban bemutatott keret kitöltését:
@KRadioaktív bomlás:
Be: N,P
Táblázatfeltöltés (T$(I,J));
Táblázatmegjelenítés (T$(I,J));
T=0; U=0;
Ciklus amig Szükséges
Q=Véletlenszám;
(I,J)=Véletlen_helyválasztás;
Ha T$(I,J)="B" és Q<P akkor T$(I,J)="K";
U=U+1;
N=N-1;
Táblázatmegjelenítés (T$(I,J));
Ki: U,N,T
Ciklus vége;
Program vége.@N
Ezek után a program megírása kedvenc gépünkön és kedvenc
nyelvünkön nem okozhat komolyabb nehézséget, esetleg a ""K"
atomok további bomlását figyelembe véve sem. (Lásd a
mellékelt Pascal programot.)
program Radio_bomlas;
{Lencsés Gábor}
uses crt;
const xmax = 50;
ymax = 20;
var t:array[1..xmax,1..ymax] of char;
x,y,i,u,n:integer;
q,p:real;
procedure feltolt;
begin
for x:=1 to xmax do begin
for y:=1 to ymax do begin
t[x,y]:='_';
end;
end;
for i:=1 to n do begin
repeat
x:=random(xmax)+1;
y:=random(ymax)+1;
until t[x,y]='_';
t[x,y]:='∙';
end;
end;
procedure megjel;
begin
clrscr;
for y:=1 to ymax do begin
gotoxy(1,y);
for x:=1 to xmax do begin
write(t[x,y]);
end;
end;
end;
procedure adatbe;
begin
write('Atomok száma : ');
readln(n);
write('Atom bomlási valószínûsége : ');
readln(p);
end;
procedure bomlas;
begin
q:=random;
x:=random(xmax)+1;
y:=random(ymax)+1;
if (t[x,y]='∙') and (q<p) then begin
t[x,y]:='*';
n:=n-1;
u:=u+1;
gotoxy(x,y);
writeln('*');
end;
gotoxy(65,2);
writeln('Atom : ',n+u);
gotoxy(65,3);
writeln('Eredeti : ',n,' ');
gotoxy(65,4);
writeln('Uj : ',u);
end;
begin
clrscr;
adatbe;
feltolt;
megjel;
u:=0;
repeat
bomlas;
until keypressed;
end.
@VGázmolekulák@N
A másik jelenség sem ismeretlen. Az Ehrenfest-féle
urnamodellrôl van szó, amelynek számos interpretációja
ismert. Van, aki két bolhás kutya képében találkozott vele,
a mostani középiskolások inkább darazsak formájában
tanulták, dobókockákkal. A probléma tehát a következô: egy
tartályban gázmolekulák találhatók. Ezt a tartályt
összekapcsoljuk egy másik, üres tartállyal. Kérdés, hogyan
alakul a molekulák száma a két tartályban az idô múlásával?
Világos, hogy mindegyik molekula természeti törvényeknek
engedelmeskedve, tehát determináltan
(differenciálegyenlettel leírható módon) mozog, de
fantasztikusan nagy számuk miatt még numerikusan sem tudjuk
megoldani a problémát. Ezért azzal a feltételezéssel élünk
-- ami nézôpontunkból igaz is --, hogy a molekulák mozgása
véletlenszerû, sztochasztikus.
Ennek megfelelôen modellünk a következô: legyen @KN@N darab
molekulánk, melyek helyét a @KH(I)@N tömb mutatja (a @KH(I)@N értéke
0 vagy 1 aszerint, hogy a kiszemelt molekula a bal vagy jobb
oldali tartályban van.). A tartályokban lévô molekulák
számát az @KA@N illetve @KB@N változók tartalmazzák. Bemenô adatként
megadható @KN@N és @KA@N értéke (ebbôl @KB=N-A@N), kimenô adatként @KA@N
illetve @KB@N értékét várjuk. Az algoritmus vázlata:
@KGázeloszlás:
Be: N, A;
B=N-A;
Tömbfeltöltés (H(I),A);
T=0;
Ciklus amíg Szükséges
I=Véletlen_molekula;
Ha H(I)=0 akkor H(I)=1;
A=A-1;
B=B+1;
különben H(I)=0;
A=A+1;
B=B-1;
Ki: T, A,B;
Ciklus vége
Program vége.@N
Természetesen a program kijelzését komfortosabbá,
látványosabbá tehetjük @KA@N és @KB@N értékének folyamatos grafikus
megjelenítésével, vagy akár a tartályok, s bennük a
molekulák kirajzolásával, mint a mellékelt Pascal nyelvû
programban látható.
program gaz_szimulacio;
{Palotás Gergely}
uses graph,crt;
var grd,grm,i,f1,x,f2,f3,ii,y,c,a,b:integer;
sz,n,j:longint;
szo1,szo2:string;
procedure tajekoztato;
begin
clrscr;
writeln(' A program gázmolekulák áramlását szimulálja !');
writeln;writeln;
writeln(' <space> - Start ');
repeat until keypressed;
end;
procedure bekeres;
begin
clrscr;
writeln(' Gázmolekulák száma : ');
repeat
readln(n);
until n>0;
if n>80000 then n:=80000 ;
clrscr;
writeln(' Mennyi van az A-ban : ');
repeat
readln(sz);
sz:=abs(sz);
until sz<40000;
end;
procedure kezdoabra;
begin
rectangle(50,50,350,300);
line(200,50,200,300);
rectangle(450,200,700,300);
rectangle(1,1,710,347);
outtextxy(400,100,'Kilepes := <SPACE>');
outtextxy(400,200,'100%');
outtextxy(400,250,' 50%');
outtextxy(400,300,' 0%');
settextstyle(4,0,5);
outtextxy(100,5,'A');
outtextxy(250,5,'B');
outtextxy(450,150,'% az A-ban');
for i:= 1 to sz do
begin
repeat
x:=random(148)+51;
y:=random(248)+51;
c:=getpixel(x,y);
until c=0;
putpixel(x,y,1);
end;
i:=0;
for i:= 1 to n-sz do
begin
repeat
x:=random(148)+201;
y:=random(248)+51;
c:=getpixel(x,y);
until c=0;
putpixel(x,y,1);
end;
f1:=1;
j:=(sz*100) div n;
putpixel(450+f1,300-j,1);
f2:=450+f1;f3:=300-j;
f1:=2;
end;
procedure szimulacio;
begin
for i:= 1 to 20 do
begin
repeat
a:=random(2);
if a=0 then b:=51
else b:=201;
x:=random(149)+b;
y:=random(248)+51;
c:=getpixel(x,y);
until c=1;
putpixel(x,y,0);
a:=abs(a-1);
if a=0 then b:=51
else b:=201;
repeat
x:=random(149)+b;
y:=random(248)+51;
c:=getpixel(x,y);
until c=0;
putpixel(x,y,1);
if a=0 then sz:=sz+1
else sz:=sz-1;
end;
end;
procedure ertekeles;
begin
j:=(sz * 100) div n;
line(f2,f3,450+f1,300-j);
f2:=450+f1;f3:=300-j;
f1:=f1+1;
end;
begin
grd:=0;
tajekoztato;
bekeres;
initgraph(grd,grm,'d:\tp\bgi');
kezdoabra;
repeat
szimulacio;
ertekeles;
ii:=ii+1;
until keypressed or (ii=250);
outtextxy(400,2,'VÉGE');
repeat until keypressed;
end.
@VFolytatjuk!@N
A sorozat további részeiben fizikai, biológiai,
statisztikai modelleket veszünk részletesebben szemügyre.
Minden esetben egy egyszerû, elemi, jól átlátható modellbôl
kiindulva, a feltételek számát növelve jutunk el igen
összetett, nagy teljesítôképességû, érdekes eredményeket
szolgáltató rendszerekig. Addig is legyen szabad az
érdeklôdô Olvasó figyelmét két alapvetô könyvre felhívni: M.
Eigen--R. Winkler: A játék (Gondolat Könyvkiadó, 1981.)
illetve Marx Gy.: A természet játékai (Ifjúsági Lapkiadó).
@KBánhegyesi Zoltán@N